// axois的二次封装，也即是重写里面的方法罢了
import axios from "axios";

import nprogress from "nprogress";
import "nprogress/nprogress.css";

// 
import store from "@/store";

const requests = axios.create({
  // 以后任何的请求都会在前面自动加上api，放在前面的叫base
  baseURL: "/api",
  // 请求超时时间，超过5s就会停止请求
  timeout: 5000,
});

/**
 * 请求拦截器，请求数据之前处理一些业务
 * 
 * use指的是使用哪个请求拦截器，通过后面的回调函数来配置
 * 由于配置项多，所以封装到一个config里面，这也是为什么要用回调函数吧
 * */
requests.interceptors.request.use((config) => {
  // 每次请求都会有这个id，那只要是使用这个浏览器的(游客)所有加入购物车操作都会累加
  if (store.state.detail.uuid_token) {
    config.headers.userTempId = store.state.detail.uuid_token
  }
  // 进度条开始
  nprogress.start();
  // 这个config包含请求头Header

  return config;
});

// 响应拦截器，一般服务器端都是由两个回调函数的，成功与失败的回调来返回给客户端
requests.interceptors.response.use(
  (res) => {
    // 进度条结束
    nprogress.done();
    return res.data;
  },
  () => {
    return Promise.reject(new Error("响应拦截器错误"));
  }
);

// 重新封装好了再次暴露
export default requests;
